Stata程序: 切割文件路径和文件名
问题描述
在编写 ado 文件时,要从用户输入的绝对文件路径中切割出「文件路径」和「文件名」。例如,
用户输入的文件地址:
「D:\stata15\ado\personal\mydata/bigfile.txt」
切割后的希望得到:
文件路径:
「D:\stata15\ado\personal\mydata/」
文件名:
「bigfile.txt」
解决思路
以最后一个出现的 \
或 /
为分界点切开字符串,左侧的为文件路径,右侧的为文件名。
有两种情形需要考虑:有些用户输入的文件地址信息中只有文件名,即默认存储于当前工作路径下的文档;还有些用户输入的文件地址同时包含 \
和 /
字符 (如本例)。
因此,我们需要事先判断用户输入的文件地址中是否包含 \
或 /
字符;进而从字符串右侧确定 \
或 /
出现的位置,并以此为基础切割字符串。
对于 Stata 14 以上的用户,可以使用 ustrrpos()
函数来确定某个字符最后一次出现的位置,详情参见 help ustrrpos()
。
对于 Stata13 以前的用户,虽然没有 ustrrpos()
函数,但我们可以先使用 strreverse(s)
函数把用户输入的文件地址字符串翻转,继而使用 strpos()
函数确定 \
或 /
出现的位置即可。
一旦确定了 \
或 /
最后一次出现的位置,就可以使用 substr()
函数进行切割了。
范例:Stata 14 以上用户
1 | local filesource "D:\stata15\mydata/bigfile.txt"
2 |
3 | if strpos(`"`filesource'"', "\") | strpos(`"`filesource'"', "/"){
4 | local p1 = ustrrpos("`filesource'","\") // stata14 +
5 | local p2 = ustrrpos("`filesource'","/") // stata14 +
6 | local i = max(`p1', `p2')
7 | }
8 | else{
9 | local i = 0
10 | }
11 |
12 | local filepath = substr(`"`filesource'"',1,`i')
13 | local filename = substr(`"`filesource'"',`=`i'+1',.)
输出结果如下:
. dis `p1'
11
. dis `p2'
18
. dis `i'
18
. dis `"`filepath'"'
D:\stata15\mydata/
. dis `"`filename'"'
bigfile.txt
范例:Stata 13 以下用户
表面上,似乎只需修改上述代码中的第 4-5 行即可,但实际上你还要修改一下第 12-13 行。这需要一点小学三年级的数学知识,留给读者自行思考了吧 ^_^。
1 | local filesource "D:\stata15\mydata/bigfile.txt"2 |
3 | if strpos(`"`filesource'"', "\") | strpos(`"`filesource'"', "/"){
4 | local p1 = strpos(strreverse("`filesource'"),"\") // stata14 +
5 | local p2 = strpos(strreverse("`filesource'"),"/") // stata14 +
6 | local i = max(`p1', `p2')
7 | }
8 | else{
9 | local i = 0
10 | }
11 |
12 | local filepath = substr(`"`filesource'"',1,`=`i'-2')
13 | local filename = substr(`"`filesource'"',`i',.
关于我们
【Stata 连享会(公众号:StataChina)】由中山大学连玉君老师团队创办,旨在定期与大家分享 Stata 应用的各种经验和技巧。
公众号推文同步发布于 CSDN-Stata连享会 、简书-Stata连享会 和 知乎-连玉君Stata专栏。可以在上述网站中搜索关键词
Stata
或Stata连享会
后关注我们。点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。
联系我们
欢迎赐稿: 欢迎将您的文章或笔记投稿至
Stata连享会(公众号: StataChina)
,我们会保留您的署名;录用稿件达五篇
以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。
招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
联系邮件: StataChina@163.com
Stata连享会2018.11.23-25现场课程-内生性专题
报名信息
主办方:太原君泉教育咨询有限公司
费用 (含报名费、材料费;差旅及食宿费自理):
全价:3000元/人(预报名价 2900元/人,预报名10月31日截止)
三人以及上:2800元/人
团报价:2600元/人(五人及以上)
学生价:2600元/人
Note: 以上所有优惠不叠加。
报名:
邮箱:wjx004@sina.com
电话 (微信同号):王老师 18903405450 ;李老师 1863610246
对公账户: 35117530000023891(山西省太原市晋商银行南中环支行)
公众号: 可搜索公众号名称(君泉Stata)或扫描二维码关注公众号了解详情
温馨提示: 按预报名顺序排座位
长按/扫描二维码报名:
欢迎加入Stata连享会(公众号: StataChina)